import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class JDBCInsert {
    public static void main(String[] args) throws SQLException {
        Scanner scanner = new Scanner(System.in);
        //JDBC 需要通过以下步骤来完成开发
        //1、创建并初始化一个数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java107?characterEncoding=utf8&&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("111111");
        //2、和数据库服务器建立连接
        Connection connection = dataSource.getConnection();
        //3、从控制台读取用户的输入内容
        System.out.println("请输入学生姓名：");
        String name = scanner.next();
        System.out.println("请输入学号：");
        int id = scanner.nextInt();
        // 4、构造SQL语句
        //String sql = "insert into student values(1,'张三')";
        //String sql = "insert into student values("+id+","+name+")";
        //通过这种方式可以完成用户动态输入
        String sql = "insert into student values(?,?)";
        //更好的写法，借助这个PrepareStatement的拼装功能来实现
        PreparedStatement statement = connection.prepareStatement(sql);
        //使用PreparedStatement提前预编译一下sql
        statement.setInt(1,id);
        statement.setString(2,name);
        //这个打印需要加到拼接数据之后
        //如果执行代码出错了，就可以把Statement打印出来 看看哪里有语法错误
        System.out.println(statement);
        //5、执行SQL语句
        int ret = statement.executeUpdate();
        System.out.println("ret="+ ret);
        //把sql语句（预编译过的）发送给数据库服务器，由服务器做出响应
        //insert、delete、update都是使用executeUpdate=>返回int表示影响到的行数
        //6、释放必要的资源
        //数据库的客户端和服务器，之间进行通信的时候，是要消耗一定的系统资源的
        //包括不限于CPU、内存、硬盘、带宽...
        statement.close();
        connection.close();
        //要先释放语句，后释放连接 谁是后创建的谁先释放
    }
}